﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
using System.Globalization;
using System.Collections;
using LibreriaAcceso.Clases;

namespace LibreriaAcceso
{
    /// <summary>
    /// Clase para mandar correos electrónicos.
    /// </summary>
    public class Mails
    {
        private SmtpClient smtpClient;
        private string _nombreAplicacion;

        /// <summary>
        /// Constructor para la clase Mails
        /// </summary>
        /// <param name="servidor">Servidor SMTP con el que se envía el correo</param>
        /// <param name="nombreAplicacion">nombre de la aplicación, se agrega header en el mail para saber desde donde se envía.</param>
        public Mails(SMTPServer servidor, string nombreAplicacion)
        {
            try
            {
                smtpClient = new SmtpClient(servidor.ServerAddress, servidor.PortNumber);
                smtpClient.Credentials = new System.Net.NetworkCredential(servidor.User, servidor.Password);
                smtpClient.EnableSsl = servidor.EnableSSL;
                this._nombreAplicacion = nombreAplicacion;
            }
            catch (Exception ex)
            {
                throw new ExcepciondeLibreriaAcceso("El servidor smtp mandó una excepción.", ex.InnerException);
            }
            
        }

        /// <summary>
        /// Función para mandar un correo a un usuario.
        /// </summary>
        /// <param name="objetoMail">El objeto del mail</param>
        public void EnviaCorreoUsuario(MailObject objetoMail)
        {
            try
            {
                MailMessage mail = new MailMessage();
                mail.Headers.Add("X-SMTPAPI", "{" + (char)34 + "category" + (char)34 + ":" + (char)34 + _nombreAplicacion + (char)34 + "}");
                mail.Body = objetoMail.Mensaje;
                if(!objetoMail.HeaderName.Equals("") && !objetoMail.HeaderValue.Equals(""))
                    mail.Headers.Add(objetoMail.HeaderName, objetoMail.HeaderValue);
                mail.From = new MailAddress(objetoMail.Remitente);
                mail.IsBodyHtml = objetoMail.isBodyHTML;
                foreach (string item in objetoMail.Destinatarios)
                {
                    try
                    {
                        mail.To.Add(new MailAddress(item));
                    }
                    catch (Exception)
                    {
                        
                     
                    }
                    
                }
                foreach (var item in objetoMail.ArchivosAdjuntos)
                {
                    mail.Attachments.Add(item);
                }
                mail.Subject = objetoMail.Asunto;
                smtpClient.Send(mail);
            }
            catch (Exception ex)
            {
                
                throw new ExcepciondeLibreriaAcceso("Hubo un error al mandar correo electronico.",ex.InnerException);
            }
           
        }
    }
}
